package node.utils;

import android.util.Log;

import com.xiaosheng.ljswl.model.Node.*;

import utils.StrUtil;

public class Sensor {

    public static byte[] CFNode(byte type) {
        return new byte[]{(byte) 0xFD, 0x04, (byte) 0xFF, (byte) 0xFF, 0, 0, type, (byte) 0xFF, (byte) 0xFF, 0};
    }

    /**
     * 判断数据完整性
     *
     * @param buffer
     * @param len
     * @return
     */
    public static boolean isZeegbi(byte[] buffer, int len) {
        return ((buffer[0] == (byte) 0xFA || buffer[0] == (byte) 0xFD) && (buffer[1] + 6) == len);
    }

    /**
     * 光线传感器
     *
     * @param buffer
     * @param len
     * @return
     */
    public static GuangMin getGuangMin(byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return null;
        if (buffer[6] == 'L') { //光线
            GuangMin guangMin = new GuangMin();
            guangMin.MAC=str.substring(str.length() - 16);
            if (((int) buffer[7]) == 0) {
                guangMin.Light=false;
            } else if (((int) buffer[7]) == 1) {
                guangMin.Light=true;
            }
            return guangMin;
        }
        return null;
    }

    /**
     * 温湿度传感器
     *
     * @param buffer
     * @param len
     * @return
     */
    public static WenShiDu getWenShiDu(byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return null;
        if (buffer[6] == 'E') { //温湿度
            WenShiDu wenShiDu = new WenShiDu();
            wenShiDu.MAC=str.substring(str.length() - 16);
            wenShiDu.shidu=buffer[7] + "." + buffer[8];
            wenShiDu.wendu=buffer[9] + "." + buffer[10];
            return wenShiDu;
        }
        return null;
    }

    /**
     * 雨滴传感器
     *
     * @param buffer
     * @param len
     * @return
     */
    public static YuDi getYuDi(byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return null;
        if (buffer[6] == 'L') { //雨滴
            YuDi yuDi = new YuDi();
            yuDi.MAC=str.substring(str.length() - 16);
            yuDi.isRain=(buffer[7] != 0);
            return yuDi;
        }
        return null;
    }

    /**
     * 继电器接收数据
     *
     * @param buffer
     * @param len
     * @return
     */
    public static Router getRouter(byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return null;
        Router router = new Router();
        router.type=(buffer[6]);
        byte[] macaddr = new byte[8];
        for (int i = buffer.length - 8; i < buffer.length; i++) {
            macaddr[i - buffer.length + 8] = buffer[i];
        }
        router.mac=(str.substring(str.length() - 16));
        router.macaddr=(macaddr);
        byte[] addr = new byte[2];
        if (
                (buffer[7] == (byte) 0xAA) && (buffer[8] == (byte) 0xAA) && (buffer[9] == (byte) 0xAA) ||
                        (buffer[7] == (byte) 0xBB) && (buffer[8] == (byte) 0xBB) && (buffer[9] == (byte) 0xBB)
        ) {
            addr[0] = buffer[4];
            addr[1] = buffer[5];
        }
        router.addr=(addr);
        return router;
    }

    /**
     * RFID传感器
     *
     * @param buffer
     * @param len
     * @return
     */
    public static RFID getRFID(byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return null;
        if (buffer[6] == 'G') { //RFID
            RFID rfid = new RFID();
            rfid.MAC=(str.substring(str.length() - 16, str.length()));
            StringBuilder catid = new StringBuilder();
            for (int i = 0; i < 6; i++) {
                catid.append(String.format("%02x", buffer[7 + i]));
            }
            rfid.CatId=(catid.toString());
            return rfid;
        }
        return null;
    }

    /**
     * 三轴加速传感器
     * @param color 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getSpeedUp(Color color, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'B') { //三轴加速
            color.mac=(str.substring(str.length() - 16));
            color.x= (buffer[7]&0xff);
            color.y= (buffer[8]&0xff);
            color.z= (buffer[9]&0xff);
            return true;
        }
        return false;
    }

    /**
     * 颜色传感器
     * @param color 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getColor(Colors color, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'D') { //颜色传感器
            color.mac=(str.substring(str.length() - 16));
            color.r= (buffer[7]&0xff);
            color.g= (buffer[8]&0xff);
            color.b= (buffer[9]&0xff);
            return true;
        }
        return false;
    }
    /**
     * 气压海拔传感器
     * @param qiYa 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getQiYa(QiYa qiYa, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'F') { //气压海拔传感器
            qiYa.mac=(str.substring(str.length() - 16));
            qiYa.wendu= ((buffer[7]&0xff)+"."+(buffer[8]&0xff));
            qiYa.qiya= ((buffer[9]&0xff)+"."+(buffer[10]&0xff));
            return true;
        }
        return false;
    }
    /**
     * 遥控器
     * @param yaoKong 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getYaoKong(YaoKong yaoKong, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'I') { //遥控器
            yaoKong.mac=(str.substring(str.length() - 16));
            yaoKong.value = (buffer[7]&0xff);
            return true;
        }
        return false;
    }
    /**
     * 可燃气体
     * @param keRan 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getKeRan(KeRan keRan, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'J') { //可燃气体
            keRan.mac=(str.substring(str.length() - 16));
            keRan.value = (buffer[7] != 0);
            return true;
        }
        return false;
    }
    /**
     * 火焰传感器
     * @param huoYan 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getHuoYan(HuoYan huoYan, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'N') { //火焰传感器
            huoYan.mac=(str.substring(str.length() - 16));
            huoYan.value = (buffer[7] != 0);
            return true;
        }
        return false;
    }
    /**
     * 电子秤
     * @param dianZiCheng 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getDianZiCheng(DianZiCheng dianZiCheng, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 'Q') { //电子秤
            dianZiCheng.mac=(str.substring(str.length() - 16));
            dianZiCheng.zhongliang=(buffer[7]&0xff);
            return true;
        }
        return false;
    }
    /**
     * 震动传感器
     * @param zhenDong 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getZhenDong(ZhenDong zhenDong, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 0x04) { //震动传感器
            zhenDong.mac=(str.substring(str.length() - 16));
            zhenDong.iszhendong=(buffer[7]!=0);
            return true;
        }
        return false;
    }
    /**
     * 红外对射传感器
     * @param hongWaiDuiShe 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getHongWaiDuiShe(HongWaiDuiShe hongWaiDuiShe, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 0x0C) { //红外对射传感器
            hongWaiDuiShe.mac=(str.substring(str.length() - 16));
            hongWaiDuiShe.istongguo=(buffer[7]!=0);
            return true;
        }
        return false;
    }
    /**
     * 水位传感器
     * @param shuiWei 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getShuiWei(ShuiWei shuiWei, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 0x0F) { //水位传感器
            shuiWei.mac=(str.substring(str.length() - 16));
            shuiWei.shuiwei=(buffer[7]&0xff);
            return true;
        }
        return false;
    }
    /**
     * 红外测距传感器
     * @param hongWaiCeJu 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getHongWaiCeJu(HongWaiCeJu hongWaiCeJu, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 0x10) { //红外测距
            hongWaiCeJu.mac=(str.substring(str.length() - 16));
            hongWaiCeJu.juli=(buffer[7]&0xff);
            return true;
        }
        return false;
    }
    /**
     * 氧气传感器
     * @param yangqi 实体对象
     * @param buffer 数据流
     * @param len 数据长度
     * @return 数据结果
     */
    public static boolean getYangQi(YangQi yangqi, byte[] buffer, int len) {
        String str = StrUtil.bytesToHexString(buffer);
        Log.e("onRecDataCom", "串口数据：" + str);
        if (!isZeegbi(buffer, len))
            return false;
        if (buffer[6] == 0x11) { //氧气传感器
            yangqi.mac=(str.substring(str.length() - 16));
            yangqi.nongdu=(buffer[7]&0xff);
            return true;
        }
        return false;
    }
}
